/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#include "../import/head.h"
#include "../data_struct/head.h"
#include "../helper_objs/head.h"
#include "../helper_proc/head.h"
#include "../macro/head.h"
#include "../impl/head.h"
#include "../msg/head.h"
#include "objs.h"
#include "hook.h"
#include "mgr.h"

namespace xos_net
{

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    static xos_container::i_container* container_ptr = 0;
    static mgr * mgr_ptr = 0;

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    mgr::mgr() : m_pNotify(0)
    {
    }

    mgr::~mgr()
    {
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int mgr::static_init( xos_container::i_container * pContainer, i_net ** ppv )
    {
        return xos_stl::static_init_module( pContainer, ppv, container_ptr, mgr_ptr );
    }

    xos_container::i_container* mgr::container()
    {
        return container_ptr;
    }

    mgr* mgr::get()
    {
        return mgr_ptr;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    // 
    // net::i_module
    // 
    int mgr::set_heart_check_interval_ms( int n_heart_interval_ms )
    {
        int ret = 0;
        config::get()->heart_check_interval_ms = n_heart_interval_ms;
        return ret;
    }

    int mgr::set_callback( xos_box::i_notify * pNotify )
    {
        int ret = 0;
        xos_box::i_callback * pThread = pNotify->get_cur_thread();
        {
            helper_callback::set_notify( pNotify );
            helper_main::set_thread( pThread );
            helper_net::set_thread( pThread );
        }
        {
            m_pNotify = helper_net::get()->clone();
            m_pNotify->set_msg_type( MSG_TYPE_NOTIFY );
        }
        return ret;
    }

    xos_box::i_notify * mgr::notify()
    {
        return m_pNotify;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int mgr::put_back_to_pool()
    {
        int ret = 0;
        delete this;
        return ret;
    }

    int mgr::init()
    {
        int ret = 0;

        if( 0 == ret )
        {
            ret = hook::init();
        }

        return ret;
    }

    int mgr::term()
    {
        int ret = 0;
        xos_stl::release_interface( m_pNotify );
        hook::term();
        return ret;
    }

} // xos_net
